import 'dart:convert';
import 'package:flutter/material.dart';

import '../index.dart';

class PostService {
  final Storage _storage = Storage();

  // 获取所有帖子（包括默认帖子和缓存的新帖子）
  Future<List<PostModel>> get_all_posts() async {
    final List<String> post_ids = _storage.get_list(Constants.post_list_key);
    final bool is_loading_post = _storage.get_bool(Constants.is_loading_post);

    // 如果postIds为空或者没加载过默认帖子，则重新加载默认帖子
    if (post_ids.isEmpty || !is_loading_post) {
      debugPrint('重新加载默认帖子数据');
      // 将默认帖子存入sp
      post_list.forEach((post) {
        if (!post_ids.contains(post.post_id)) {
          post_ids.add(post.post_id);
          _storage.set_string(
            'post_${post.post_id}',
            json.encode(post.toJson()),
          );
        }
      });
      _storage.set_list(Constants.post_list_key, post_ids);
      _storage.set_bool(Constants.is_loading_post, true);
    }

    // 获取所有的帖子
    List<PostModel> all_posts = [];
    post_ids.forEach((String id) {
      final String? postJson = _storage.get_string('post_$id');
      if (postJson != null) {
        try {
          final Map<String, dynamic> postMap = json.decode(postJson);
          all_posts.add(PostModel.fromJson(postMap));
        } catch (e) {
          debugPrint('解析帖子错误: $e, postId: $id');
        }
      }
    });

    // 如果没有获取到任何帖子，强制重新加载默认帖子
    if (all_posts.isEmpty) {
      debugPrint('没有获取到任何帖子，强制重新加载默认帖子');
      _storage.set_bool(Constants.is_loading_post, false);
      return get_all_posts();
    }

    //将帖子按时间排序
    all_posts.sort((a, b) => b.post_created_time.compareTo(a.post_created_time));
    return all_posts;
  }

  // 发布新帖子
  Future<bool> create_post(PostModel newPost) async {
    try {
      final List<String> post_ids = _storage.get_list(Constants.post_list_key);

      // 添加检查，只有在ID不存在时才添加到列表中
      if (!post_ids.contains(newPost.post_id)) {
        post_ids.add(newPost.post_id);
        _storage.set_list(Constants.post_list_key, post_ids);
      }

      final String postJson = json.encode(newPost.toJson());
      _storage.set_string('post_${newPost.post_id}', postJson);

      return true;
    } catch (e) {
      debugPrint('Error creating post: $e');
      return false;
    }
  }

  // 获取单个帖子详情
  Future<PostModel?> get_post_by_id(String post_id) async {
    final all_posts = await get_all_posts();
    try {
      return all_posts.firstWhere((post) => post.post_id == post_id);
    } catch (e) {
      return null;
    }
  }
}
